<?php
/**
 * @Author: dxf
 * @Date: 2020-03-16
 * @Time: 15:01
 */

/**
 * swoole进程测试
 */

$a = 0;

for($i=0;$i<10;$i++){
    $process = new \Swoole\Process(function() use (&$a){
        //子进程空间执行业务逻辑
        sleep(20);
        echo getmypid()."正在执行业务".PHP_EOL;
        $a++;  //$a 永远不会变  默认进程隔离特性
    });
    $process->start();
}

//回收结束运行的子进程。
//每个子进程结束后，父进程必须都要执行一次 wait() 进行回收，
//否则子进程会变成僵尸进程，会浪费操作系统的进程资源。
//如果父进程有其他任务要做，没法阻塞 wait 在那里，
//父进程必须注册信号 SIGCHLD 对退出的进程执行 wait。
// SIGCHILD 信号发生时可能同时有多个子进程退出；
//必须将 wait() 设置为非阻塞，循环执行 wait 直到返回 false。

while($res = \Swoole\Process::wait(true)){
    echo "PID={$res['pid']}".PHP_EOL;
}

var_dump($a);